package com.tfjybj.itoo.exam.provider.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tfjybj.itoo.exam.entity.DisciplineInfoEntity;
import com.tfjybj.itoo.exam.model.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * DisciplineInfoDao接口
 * disciplineInfo表
 *
 * @author 任晓帅
 * @version 2.0.0
 * @since 2.0.0 2018-11-15 19:40:28
 */
@Repository("disciplineInfoDao")
public interface DisciplineInfoDao extends BaseMapper<DisciplineInfoEntity> {

    //region 模板生成：模糊查询

    /**
     * 根据考试id模糊查询disciplineInfo
     *
     * @param examinationId 考试id
     * @return 模糊查询的disciplineInfo集合
     * @author 任晓帅
     * @since 2.0.0 2018-11-15 19:40:28
     */
    List<DisciplineInfoEntity> queryLikeExaminationId(@Param("examinationId") String examinationId);


    //endregion

    /* **********************************以下为非模板生成的内容********************************* */

    /**
     *  查看本考场中考生的违纪信息
     * @author      任晓帅
     * @return       List<DisciplineInfoModel> 违纪信息
     * @param       examId 考生id  examRoomId 考场id
     * @since 2.0.0       2019年5月21日15:56:10
     */
    List<DisciplineInfoModel> queryDisciplineStudent(@Param("examId") String examId, @Param("examRoomId") String examRoomId);

    /**
     *  查看当前考场中违纪人数
     * @author      王雪芬 任晓帅
     * @return    int 违纪人数
     * @param          examId 考试id examRoomId 考场id
     * @since 2.0.0      2018-11-19 09:40:41
     */
    List<DisciplineInfoModel> queryDisciplineCount(@Param("examId") String examId, @Param("examRoomId") String examRoomId);
    /**
     * 查看学生考试的实时成绩和信息
     * @param examRoomId 考场id
     * @return 考生实时信息的集合
     * @author 李青松
     * @since 2.0.0 2018-11-25 17:07:31
     */
    List<RealTimeModel> queryStudentRealTime(@Param("examRoomId") String examRoomId, @Param("examId") String examId);

    /**
         * 在线监控（饼状图）根据考场id查询所有考试学生信息
         * @param examRoomId 考场id
         * @return
         * @author 魏恩君
         * @since 2.0.0 2018/12/23
         */

    List<RealTimeModel> queryAllStudent(@Param("examRoomId") String examRoomId, @Param("examId") String examId);

    /**
     * 根据搜索框查询考场内相应的考生
     * @param studentNamekc
     * @param studentCode
     * @param state
     * @param examRoomId
     * @author 于云秀
     * @since 2018年12月19日
     * @return ItooResult
     */
    List<RealTimeModel> queryStudentInfo(@Param("studentNamekc") String studentNamekc,
                                         @Param("studentCode") String studentCode,
                                         @Param("State") String state,
                                         @Param("examRoomId") String examRoomId,
                                         @Param("questionTypeID") String questionTypeID,
                                         @Param("studentClass") String studentClass,
                                         @Param("examId") String examId);

    /**
     * 查看学生考试的实时成绩和信息
     *
     * @param examRoomId 考场id
     * @return 考生实时信息的集合
     * @author 李青松
     * @since 2.0.0 2018-11-25 17:07:31
     */
   // List<RealTimeModel> queryStudentRealTime(@Param("examRoomId") String examRoomId);

    /**
         *根据考试id获取该场考试下的所有题型
         * @param examID 考试ID
         * @return 题型分类的集合
         * @author 魏恩君
         * @since 2.0.0 2018/12/22
         */
    List<QuestionTypeModel> selectQuestionTypeByExamID(@Param("examID") String examID);

    /**
         * 根据考生id更新缺考信息
         * @param id 考生id
         * @param absentInfo 缺考信息
         * @return boolean
         * @author 魏恩君
         * @since 2.0.0 2018/12/22
         */

    boolean addExamMissingInf(@Param("id") String id, @Param("absentInfo") String absentInfo);

    /**
         * 根据搜索框查询已登录后的考生信息-魏恩君-2018年12月26日
         * @param
         * @return
         * @author 魏恩君
         * @since 2.0.0 2018/12/26
         */

    List<RealTimeModel> queryLoginedInf(@Param("studentNamekc") String studentNamekc,
                                        @Param("studentCode") String studentCode,
                                        @Param("State") String state,
                                        @Param("examRoomId") String examRoomId,
                                        @Param("questionTypeID") String questionTypeID,
                                        @Param("studentClass") String studentClass,
                                        @Param("examId") String examId);


    /**
     * 根据搜索框查询未登录的考生信息-魏恩君-2018年12月26日
     * @param
     * @return
     * @author 魏恩君
     * @since 2.0.0 2018/12/26
     */

    List<RealTimeModel> queryNotLoginInf(@Param("studentNamekc") String studentNamekc,
                                         @Param("studentCode") String studentCode,
                                         @Param("State") String state,
                                         @Param("examRoomId") String examRoomId,
                                         @Param("questionTypeID") String questionTypeID,
                                         @Param("studentClass") String studentClass,
                                         @Param("examId") String examId);
    /**
     * 根据考试id查询违纪信息
     * @param studentCode
     * @author 于云秀
     * @since 2018年12月27日19:09:33
     * @return
     */
    List<DisciplineInfoModel> selectWj(@Param("studentCode") String studentCode);

    /**
     * 实时监控简单查询
     * @author 于云秀
     * @since 2019年1月4日
     * @param search
     * @param examId
     * @param examRoomId
     * @return
     */
    List<RealTimeModel> selectExamineeInfo(@Param("search") String search, @Param("examId") String examId, @Param("examRoomId") String examRoomId);
    /**
     * 查询监考老师
     * @author 于云秀
     * @since 2019年1月4日
     * @param examId
     * @param examRoomId
     * @return
     */
    List<ExamRoomModel> selectTeacherInfo(@Param("examId") String examId, @Param("examRoomId") String examRoomId);



    /**
     * 批量添加缺考信息
     * @param listID 未登录考生id
     * @param absentInfo  缺考信息
     * @return boolean
     * @author 魏恩君
     * @since 2.0.0 2019/01/03
     */

    Boolean batchAddNotLogin(@Param("notLoginIds") List<String> listID, @Param("absentInfo") String absentInfo);


    /**
     * 实时监控正在进行考试的考试信息
     * @author cll
     * @since 2019年3月20日
     * @param operator
     * @return
     */
    List<ExaminationInfoModel> selectExaminationInfo(@Param("operator") String operator);

}
